package br.com.foxinline.servico;

import br.com.foxinline.modelo.DetalheEntradaSelo;
import br.com.foxinline.modelo.EntradaSelo;
import br.com.foxinline.modelo.Selo;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;



/**
 *
 * @author cadomeireles
 */
@Stateless
public class DetalheEntradaSeloServico extends ServicoGenerico<DetalheEntradaSelo> {
    
    public DetalheEntradaSeloServico() {
        super(DetalheEntradaSelo.class);
    }
    
    public List<DetalheEntradaSelo> pesquisar(EntradaSelo entradaSelo) {
        String sql = "select detalhes from EntradaSelo entradaSelo join entradaSelo.detalhesEntradaSelo detalhes where entradaSelo = :entradaSelo";

        Query query = getEntityManager().createQuery(sql);
        if (entradaSelo != null && entradaSelo.getId() != null) {
            query.setParameter("entradaSelo", entradaSelo);
        }
        return query.getResultList();
    }
    
    public List<Selo> obterSelos(DetalheEntradaSelo detalheEntradaSelo) {
        String sql = "select detalheEntradaSelo.selos from DetalheEntradaSelo detalheEntradaSelo where detalheEntradaSelo = :detalheEntradaSelo";
        
        Query query = getEntityManager().createQuery(sql);
        if (detalheEntradaSelo != null && detalheEntradaSelo.getId() != null) {
            query.setParameter("detalheEntradaSelo", detalheEntradaSelo);
        }
        return query.getResultList();
    }
    
    public Integer quantidadeSelos(DetalheEntradaSelo detalheEntradaSelo, Boolean distribuido) {
        String sql = "select count(selo) from DetalheEntradaSelo detalheEntradaSelo join detalheEntradaSelo.selos selo where selo.distribuido = :distribuido";
        
        if (detalheEntradaSelo != null && detalheEntradaSelo.getId() != null) {
            sql += " and detalheEntradaSelo = :detalheEntradaSelo";
        }
        
        Query query = getEntityManager().createQuery(sql);
        
        if (detalheEntradaSelo != null && detalheEntradaSelo.getId() != null) {
            query.setParameter("detalheEntradaSelo", detalheEntradaSelo);
        }

        if (distribuido != null) {
            query.setParameter("distribuido", distribuido);
        }
        
        return Integer.parseInt(query.getSingleResult().toString());        
    }

    public List<Selo> ultimasEntradas(DetalheEntradaSelo detalheEntradaSelo, Integer quantidade) {
        String sql = "select selos from DetalheEntradaSelo detalheEntradaSelo join detalheEntradaSelo.selos selos";

        if (detalheEntradaSelo != null && detalheEntradaSelo.getId() != null) {
            sql += " where detalheEntradaSelo = :detalheEntradaSelo order by selos.id desc";
        }

        Query query = getEntityManager().createQuery(sql);
        if (detalheEntradaSelo != null && detalheEntradaSelo.getId() != null) {
            query.setParameter("detalheEntradaSelo", detalheEntradaSelo);
        }

        return query.setMaxResults(quantidade).getResultList();
    }    
    
}
